/*
 * @Author: dadadaXU 1413107032@qq.com
 * @Date: 2025-01-18 20:02:55
 * @LastEditors: dadadaXU 1413107032@qq.com
 * @LastEditTime: 2025-01-26 17:00:28
 * @FilePath: \LeetCodee:\Project\C&C++\leetcode\49.字母异位词分组.cpp
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/*
 * @lc app=leetcode.cn id=49 lang=cpp
 *
 * [49] 字母异位词分组
 * 
 * 方法1：利用排序判断字母异位词
 * - 使用 emplace_back 优化 unordered_map<string, vector<string>> 元素插入
 * 
 * 方法2：计数
 * - 使用长度为 26 的数组记录每个字母出现的次数
 */

#include <vector>
#include <string>
#include <iostream>
#include <unordered_map>
#include <algorithm>

using namespace std;

// @lc code=start
class Solution
{
public:
    /* key: 字母按照顺序排列 */
    unordered_map<string, vector<string>> hash_strs;

    vector<vector<string>> groupAnagrams(vector<string> &strs)
    {
        string key_str;
        for (auto s : strs)
        {
            key_str = s;
            sort(key_str.begin(), key_str.end());

            hash_strs[key_str].emplace_back(s);
        }

        vector<vector<string>> v_str;
        for (auto v : hash_strs)
            v_str.push_back(v.second);

        return v_str;
    }
};
// @lc code=end
